/**
 *封装get请求 
 * @param {String} url 
 * @param {object} params 
 * @param {function} callback 
 * @param {String/null} type 后端返回的数据类型 如果传json就格式化 
 * @param {object} headers 
 */
 function get(url,params,callback,type=null,headers={}){
    // 一、创建xhr对象
const xhr = new XMLHttpRequest
// 二、监控请求状态
xhr.onreadystatechange= () => {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            let res = xhr.responseText
            if(type==='json')res=JSON.parse(res)
            callback(res)
        } else {
            console.log('报错：', xhr.status);
        }
    }
}
// 三、设置请求方式、请求地址
//params是对象时
//params = {a:1, b:2}  需要转换格式: a=1&b=2
// 1-遍历对象
// 2-对象中的数据按照'键=值'这个格式push到数组中 ['a=1', 'b=2']
// 3-最后数组转字符串按照[&] 
let temp = []
for(let key in params){
    temp.push(`${key}=${params[key]}`)
}
xhr.open('get',`${url}?${temp.join('&')}`)
//自定义请求头
for(let key in headers){
    xhr.setRequestHeader(key,headers[key])
}
// 四、发送
xhr.send(null)
}

/**
 *封装post请求 
 * @param {String} url 
 * @param {object} params 
 * @param {function} callback 
 * @param {String/null} type 后端返回的数据类型 如果传json就格式化 
 * @param {object} headers 
 */
function post(url,params,callback,type=null,headers={}){
    // 一、创建xhr对象
const xhr = new XMLHttpRequest
// 二、监控请求状态
xhr.onreadystatechange= () => {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            let res = xhr.responseText
            if(type==='json') res = JSON.parse(res)
            callback(res)
        } else {
            console.log('报错：', xhr.status);
        }
    }
}
// 三、设置请求方式、请求地址
xhr.open('get',url)
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')    
let temp = []
for(let key in params){
    temp.push(`${key}=${params[key]}`)
}
for(let key in headers){
    xhr.setRequestHeader(key,headers[key])
}
// 四、发送
xhr.send(params)
}
export {get,post}
